#!/usr/bin/env node

const log = console.log;

// 定义一个队列类
class Queue {
    constructor() {
      // 初始化一个空数组作为队列
      this.queue = [];
    }
    // 向队列中添加数据的方法
    write(data) {
      this.queue.push(data);
    }
    // 从队列中取出数据的方法
    read() {
      return this.queue.shift();
    }
  }
  // 定义一个生产者类
  class Producer {
    constructor(queue) {
      // 将传入的队列实例赋值给生产者实例的属性
      this.queue = queue;
    }
    // 创建数据并添加到队列的方法
    create(data) {
      log('+ prd create:', data);// 输出日志，表示生产者创建了数据
      // 将数据添加到队列中
      this.queue.write(data);
    }
  }
  // 定义一个消费者类
  class Consumer {
    constructor(queue) {
      // 将传入的队列实例赋值给消费者实例的属性
      this.queue = queue;
    }
    // 从队列中取出数据并销毁的方法
    destroy() {
      const data = this.queue.read();
      if (data !== undefined) {
        log('- csm destroy:', data);
      }
    }
  }
  
  function main() {
    const queue = new Queue();
    const prd = new Producer(queue);
    const csm = new Consumer(queue);
  
    for (let i = 0; i < 5; i++) {
      prd.create(i);
      csm.destroy();
    }
  }
  
  main();